perm filename PLAY.FAI[TMP,LCS] blob
sn#218811 filedate 1976-06-08 generic text, type T, neo UTF8
00100 TITLE SOUND; DOROTHY BENDER MEMORIAL TITLE 1969,69,69, 1975(LCS)*******
00200
00300 ; ROUTINE TO READ THE OUTPUT FROM THE MUSIC
00400 ; PROGRAM AND CALL THE D-A CONVERTER TO PLAY.
00500 ;
00600 ; NAME OF THE FILE TO BE INPUTTED IS 'MUSIC.MUS' OR 'MUSAA.DMD',
00700 ; THE FIRST RECORD OF WHICH CONTAINS THE
00800 ; NUMBER OF WORDS OF DATA IN THE ENTIRE DISK FILE.
00900
01000 ENTRY PLAY
01100 EXTERN JOBREL
01200 A ← 1 ;WORK
01300 B ← 2 ;WORK
01400 RET ← 3 ;RETURN ACCUMULATOR
01500 T1 ← 4 ; TEMP FOR ADSMAP (JAM)
01600 ;;BUFSIZ ←=20224 ;****** DOUBLE THIS FOR 4-CHANNEL SOUND!!!!!
01700 BUFSIZ ←4400*3 ;OPTIMIZED FOR 3330 DSK. (←4400*3 IN SYS VERSION)
01800 ↓DSKCHN ←1 ;DISK CHANNEL FOR INPUT
01900 ↓ADCHN ←2 ;D-A CHANNEL FOR OUTPUT
02000
02100 OPDEF READCH [51B8]
02200 OPDEF MESSAGE[51B8!3B12]
02300
02400 PLAY: 0
02500 BEG: ;CALLI 0,0 ;RESET I/O DEVICES
02600 OPEN DSKCHN,[17 ;MODE
02700 'DSK ' ;DEVICE NAME
02800 0] ;NO BUFFER HEADERS
02900 HALT BEG ;RESTART IF DEVICE IS UNAVAILABLE
03000
03100 MOVE 6,['MUSAA ']
03200 MOVE 7,['DMD ']
03300 SETZM DIR2+3 ;FOR RESTART
03400 SETZM DIR+3 ;FOR RESTART
03500 ; OUTSTR[ASCIZ/FILE NAME -- /] ;READS '.DMD' FILES ONLY.
03600 ; SETZM DIR+1
03700 ; SETZM DIR
03800 ; SETO 5, ;FLAG FOR EXTENSIONS
03900 ; MOVE 2,[POINT 6,DIR]
04000 ; JRST GOT
04100 ;EXT: MOVE 2,[POINT 6,DIR+1]
04200 ; SETZ 5,
04300 ;GOT: INCHWL 1
04400 ; CAIN 1,15 ; A CR?
04500 ; JRST GOT
04600 ; CAIGE 1,60 ; CHECKS FOR GOOD CHARS.
04700 ; JRST LX
04800 ; SUBI 1,40
04900 ; IDPB 1,2
05000 ; JRST GOT
05100 ;LX: JUMPE 5,LZ
05200 ; SKIPN DIR
05300 MOVEM 6,DIR
05400 ; CAIN 1,56 ; 56='.'
05500 ; JRST EXT
05600 ; JRST MESS
05700 ;LZ: SKIPN DIR+1
05800 MOVEM 7,DIR+1
05900
06000
00100 ;FIND OUT NUMBER OF CHANNELS AND THE SPEED.
00200 MESS: MESSAGE [ASCIZ/ HOW MANY CHANNELS? /]
00300 READCH A
00400 SUBI A,"0" ;CONVERT TO BINR
00500 DPB A,[POINT 2,DACPAR,35]
00600
00700 SPD: MESSAGE [ASCIZ/ SPEED? /]
00800 READCH A
00900 CAIN A,"X"
01000 JRA 16,1(16)
01100 CAIG A,"5" ;IS IT 1 - 5?
01200 JRST SPD2 ;YES
01300 SKIPN DIR+3 ;IS THIS THE 1ST TIME THRU?
01400 JRST SPD ;YES, SO WE NEED A GOOD NUM.
01500 JRST PLA2 ;ANYTHING ELSE WILL REPLAY
01600
01700 SPD2: SUBI A,"0"
01800 DPB A,[POINT 3,DACPAR,26]
01900
02000 PLA2: SETZM DIR+3
02100 SETZM DIR2+3
02200 MOVE 5,DMD ;GET 'DMD '
02300 LOOKUP DSKCHN,DIR
02400 SKIPA ;CAN'T FIND MUSAA.DMD
02500 JRST XOPEN ;FOUND IT
02600 CAMN 5,DIR+1 ;IS DIR+1='DMD '?
02700 JRST MUS ;YES, GO LOOK FOR MUSIC.MUS
02800 MOVEM 5,DIR+1
02900 JRST PLA2 ;TRY IT WITH 'DMD '
03000 MUS: LOOKUP DSKCHN,DIR2 ;TRY FOR MUSIC.MUS
03100
03200 JRST [MESSAGE[ASCIZ/
03300 *** MUSIC FILE NOT FOUND/]
03400 CALLI 12]
03500 ;EXIT IF FILE IS MISSING
03600 MOVE A,DIR2+3 ;GET LENGTH OF MUSIC.MUS
03700 MOVEM A,DIR+3;PUT IT IN RIGHT PLACE
03800
03900 XOPEN: OPEN ADCHN,[117 ;MODE
04000 'DAC ' ;DEVICE NAME
04100 0] ;NO BUFFER HEADERS
04200
04300 JRST [MESSAGE[ASCIZ/
04400 ***D-A NOT AVAILABLE/]
04500 CALLI 12]
04600 ;EXIT IF D-A IS UNAVAILABLE
04700 MTAPE ADCHN,DACPAR
04800
04900 XGPOK: MOVSI 'XGP' ;DOWN TO SPWAR FOR XGP CONFLICT.
05000 DEVUSE 0,
05100 HLRZ 0,0
05200 CAIN 400000
05300 JRST SPWAR
05400 INIT 16,17
05500 SIXBIT .XGP.
05600 0
05700 JRA 16,2(16)
05800
05900 SPWAR: HRRZ A,JOBREL
06000 HRRZM A,OLDREL#
06100 HRRZM A,BUF1
06200 HRRZI A,1(A)
06300 HRRM A,HEADER
06400 ADDI A,BUFSIZ
06500 HRRZM A,BUF2
06600 ADDI A,BUFSIZ+1
06700 HRRZM A,BUF3
06800 ADDI A,BUFSIZ+2
06900 CORE A,
07000 JRST [OUTSTR[ASCIZ/
07100 CAN'T GET CORE!
07200 /]↔ JRA 16,(16)]
07300
07400 LOCK A, ;SPWAR:
07500 ;; SPCWAR 17,[CALLI]
07600 MESSAGE [ASCIZ/ GO? /]
07700 READCH A
07800 ; READS TO FIND (AND IGNORE) HEADER.(1ST REC.)
07900 INPUT DSKCHN,HEADER
08000 HRRZ A,@BUF1
08100 CAIE A,525252 ; LOOKS FOR MAGIC NUMBER.
08200 USETI DSKCHN,1 ; NO HEADER, SO START AT BEGINNING.
08300
08400
08500 LNTH: movs a,DIR+3 ;get length of file.
08600 movnm a,nwd
08700 ;-----------------------------------------------------
08800
00100 ;BEGIN MAIN BODY OF PROGRAM
00200
00300 MOVE T1,[647003,,0]
00400 ADSMAP T1, ; SET AUDIO SWITCH TEMPORARILY TO DAC (JAM 7/24/75)
00500 ; THE OPTIONS WE ASKED FOR ARE TEMPORARY, WAIT FOR
00600 ; PAGE TO FINISH, DON'T INTERRUPT WITH MORE PAGES,
00700 ; DELAY BEEPS TO END OF XFR.
00800 OUTSTR [ASCIZ /
00900 TO DAC . . ./]
01000 LOOP: JSP RET,SUB ;ROUTINE TO READ AND WRITE
01100 BUF1: 0
01200 ; BUF1-1 ;USE BUF1 FOR THE I/O
01300 JUMPLE B,OUT ;DONE
01400
01500 JSP RET,SUB
01600 BUF2: 0
01700 ; BUF2-1
01800 JUMPLE B,OUT
01900
02000 JSP RET,SUB ;CALL IT AGAIN
02100 BUF3: 0
02200 ; BUF3-1 ;USE BUF3 FOR THE I/O
02300 JUMPG B,LOOP ;GO BACK FOR MORE IF B>0
02400
02500 OUT: close dskchn, ;END OF PROGRAM.
02600 releas adchn,
02700 OUTSTR [ASCIZ / DONE!
02800 /]
02900 SETO T1,
03000 ADSMAP T1, ; RESET AUDIO SWITCH CONNECTION TO PERMANENT (JAM 7/24/75)
03100 ;; SPCWAR 0,'SSW'
03200 UNLOCK
03300 RELEASE 16,
03400 HRRZ A,OLDREL
03500 CORE A,
03600 JRST [OUTSTR[ASCIZ/DONK??!!/]↔JRA 16,(16)]
03700 jrst SPD
03800
03900 ;SUBROUTINE TO SET UP IOWD AND READ AND WRITE.
04000 ; 1(RET) WILL BE THE RETURN
04100 ; 0(RET) WILL BE THE ADDRESS OF THE BUFFER TO BE
04200 ; PUT IN THE RIGHT HALF OF THE IOWD.
04300 ; A WILL BE A WORK REGISTER
04400 ; B WILL BE TESTED ON THE OUTSIDE.
04500
04600 SUB: MOVNI A,BUFSIZ ;PICK UP AND COMPLEMENT BUFSIZ
04700 ADDB A,NWD ;A←NWD-BUFSIZ
04800 ;NWD←NWD-BUFSIZ
04900 MOVE B,A ;SAVE B TO BE TESTED FOR LAST
05000 ;TIME.
05100 JUMPL A,LAST ;SET UP FOR LAST TIME.
05200 MOVEI A,0
05300
05400 ;THE IOWD LOOKS LIKE:
05500 ; [-BUFSIZ / BUFI-1]
05600
05700 LAST: ADDI A,BUFSIZ
05800 MOVNS A ;COMPLEMENT A
05900 HRL A,0(RET) ;PICK UP BUFI AND MOVE IT
06000 ;TO THE LEFT SIDE OF A.
06100 MOVSM A,INLIST ;SWAP A AND MOVE IT.
06200 MOVSM A,OUTWC ;SAME FOR OUTPUT.
06300 INPUT DSKCHN,INLIST ;READ A RECORD.
06400 OUTPUT ADCHN,OUTWC ;WRITE THE RECORD.
06500 JRST 1(RET) ;RETURN
06600 ;---------------------------------------------------------
06700
06800 ; STORAGE:
06900
07000 NWD: 0 ;FOR NUMBER OF WORDS OF INPUT.
07100 ;↓BUF1: BLOCK BUFSIZ+1 ;BUFFER 1
07200 ;BUF2: BLOCK BUFSIZ+1 ;BUFFER 2
07300 ;BUF3: BLOCK BUFSIZ+1 ;BUFFER 3
07400 DMD: 'DMD '
07500 DIR2: 'MUSIC ' ;FILENAME FOR INPUT
07600 'MUS ' ;EXTENSION
07700 0 ;INFORMATION ON FILE
07800 0 ;PROJECT PROG#
07900 DIR: 0 ;NAME
08000 0 ;EXTENSION
08100 0 ;INFORMATION ON FILE
08200 0 ;PROJECT PROG#
08300 CLIST: IOWD 1,NWD ;FOR THE FIRST RECORD
08400 0
08500 INLIST: 0 ;WILL CONTAIN AN IOWD
08600 0
08700 HEADER: IOWD =128,BUF1
08800 0
08900 OUTWC: 0 ;WILL CONTAIN AN IOWD FOR D-A
09000 ;; 3650 ;MAGIC BITS FOR 136.
09100 OUTBIT: 4000 ;BITS FOR D-A
09200 BLOCK 2
09300 DACPAR: 1001 ;SPEED 0=6.4K, 1=12.8, 2=25.6, 3=51.2, 4=102.4, 5=
09400 0
09500 0
09600
09700
09800 A←1
09900 B←2
10000 D←3
10100
10200 ichn←adchn
10300
10400 END